package com.sg.dto.biz.app.req;

import com.sg.dto.base.app.common.StandardDataDto;
import com.sg.dto.biz.app.common.CycleDto;
import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * @desc ImplementSevenReceivingFieldReqDto
 * @使用场景
 */
@Data
public class ImplementSevenReceivingFieldReqDto
        extends BaseDto
        implements Serializable {

    /**
     * 数据点类型 FROM_LAST_BUDGET:预算较上次变化 FROM_LAST_RATIO_BUDGET:预算较上次增降幅 FUNDS_USE_PROGRESS:资金使用进度 BUDGET_USABLE:预算账户可用金额 BUDGET_FROZEN:预算账户冻结金额 CUMULATIVE_BUDGET:预算账户累计结算金额 BUDGET_TOTAL:预算账户总金额 FUNDS_RECEIVED_USABLE:实体账户可用金额 FUNDS_RECEIVED_FROZEN:实体账户冻结金额 FUNDS_RECEIVED_TOTAL:实体账户累计到账总金额 ACTUAL_VALUE:实际值 COUNT_ACTUAL_VALUE:计算实际值 CHANGE_FROM_LAST_TARGET:较上次目标变化值 COUNT_CHANGE_FROM_LAST_TARGET:计算较上次目标变化值 FROM_LAST_TARGET_LIFT_RATIO:较上次目标增降幅 COUNT_FROM_LAST_TARGET_LIFT_RATIO:计算较上次目标增降幅 PROGRESS_VALUE:进度值 COUNT_PROGRESS_VALUE:计算进度值 FROM_LAST_PROGRESS_VALUE:进度较上次变化值 COUNT_FROM_LAST_PROGRESS_VALUE:计算进度较上次变化值 PROGRESS_FROM_LAST_RATIO:进度较上次增降幅 COUNT_PROGRESS_FROM_LAST_RATIO:计算进度较上次增降幅 REACH:达成度 COUNT_REACH:计算达成度 FROM_LAST_REACH:达成度较上次变化值 COUNT_FROM_LAST_REACH:计算达成度较上次变化值 ACTUAL_FROM_LAST_TIME_RATIO:达成度较上次增降福 COUNT_FROM_LAST_REACH_RATIO:计算达成度较上次增降福 FUNDS_RECEIVED:到账金额 FUNDS_RECEIVED_FROM_LAST:到账较上次变化值 CUMULATIVE_FUNDS_RECEIVED:实体账户累计使用金额 FUNDS_AUTO_RECEIVED:资金自动到账金额 FUNDS_EXPEND:资金支出金额 FUNDS_EXPEND_FROM_LAST:资金支出较上次变化值 CUMULATIVE_FUNDS_EXPEND:累计支出资金 BUDGET_AMOUNT:预算账户账户余额 FUNDS_RECEIVED_BALANCE:实体账户账户余额 SUBJECTIVE_MARK:主观评分 SUBJECTIVE_SCORE:主观得分 OBJECTIVE_SCORE:客观得分 PROCESS_SCORE:过程得分 FROM_LAST_REPORT_SCORE:汇报得分较上次变化值 RESULT_SCORE:结果得分 FROM_LAST_RATIO_REPORT_SCORE:汇报得分较上次增降幅 REAL_TIME_SCORE:实时得分 FROM_LAST_ACTUAL_SCORE:实际得分较上次变化值 GIVE_LIKES:点赞数 FROM_LAST_RATIO_ACTUAL_SCORE:实际得分较上次增降幅 DELAY_SURPLUS_LENGTH:延后或剩余天数 SUB_REPORT_AVG_SCORE:子周期汇报平均分 LAST_REPORT_AVG_SCORE:末级周期汇报平均分 RECENTLY_REPORT_AVG_SCORE:最近周期汇报平均分 PROCESS_REPORT_MID_SCORE:过程汇报中期得分 SUB_PROCESS_REPORT_SCORE:子周期过程汇报得分 MID_PROCESS_REPORT_SCORE:中期过程汇报得分 FATHER_PROCESS_REPORT_SCORE:父周期过程汇报得分 CURRENT_SUBJECTIVE_SCORE:当前主观得分 PROCESS_SUBJECTIVE_SCORE:过程主观得分 LOCAL_LEVEL_SCORE:本级得分 LOWER_LEVEL_SCORE:下级得分 ACTUAL_SCORE:实际得分 ROLE_SUBJECTIVE_SCORE:角色主观得分 SUB_ACTUAL_SCORE:子周期实际得分 MID_ACTUAL_SCORE:中期实际得分 FATHER_ACTUAL_SCORE:父周期实际得分 LOW_KR_ACTUAL_SCORE:下级KR实际得分 SUBJECTIVE_AND_OBJECTIVE_SCORE:主客观得分 BUDGET:预算金额 FUNDS_RECEIVED_FROM_LAST_RATIO:到账较上次增降幅 BUDGET_DISBURSE:预算支出金额 FATHER_CYCLE_REPORT_SCORE:父周期汇报得分 MID_CYCLE_REPORT_SCORE:中期汇报得分 LOWER_PROCESS_CYCLE_REPORT_SCORE:下级过程周期汇报得分 SUB_CYCLE_REPORT_SCORE:子周期汇报得分 LOWER_WORK_CYCLE_REPORT_SCORE:下级工作周期实际得分 LAST_CYCLE_REPORT_SCORE:末级周期汇报得分 NOT_LAST_PROCESS_CYCLE_REPORT_SCORE:中间周期汇报得分 SOURCE_BUDGET_FUNDS_PROP:预算资金来源占比 TARGET_CYCLE_BUDGET_FUNDS_PROP:目标周期预算占比 BUDGET_SOURCE_OF_FUNDS:预算资金来源设置 CYCLE_BUDGET_AMOUNT:目标周期预算金额 REPORT_SCORE:汇报得分 PROCESS_REPORT_SCORE:过程汇报得分 REPORT_AVG_SCORE:汇报平均分
     */
    @NotNull(message = "数据点类型不能为空")
    @ApiModelProperty("数据点类型")
    private String dataType;

    /**
     * 父子中过程周期类型 PARENT_CYCLE:父周期 MID_CYCLE:中期 SUB_CYCLE:子周期 PROCESS_CYCLE:过程周期
     */
    @NotNull(message = "父子中过程周期类型不能为空")
    @ApiModelProperty("父子中过程周期类型")
    private String parentSubMidCycleType;

    /**
     * 归属周期ID
     */
    @NotNull(message = "归属周期ID不能为空")
    @ApiModelProperty("归属周期ID")
    private String cycleId;

    /**
     * 更新周期ID
     */
    @NotNull(message = "更新周期ID不能为空")
    @ApiModelProperty("更新周期ID")
    private String updateCycleId;

    /**
     * 归属内容表主键ID
     */
    @NotNull(message = "归属内容表主键ID不能为空")
    @ApiModelProperty("归属内容表主键ID")
    private String entityId;

    /**
     * 冗余评价模板ID
     */
    @NotNull(message = "冗余评价模板ID不能为空")
    @ApiModelProperty("冗余评价模板ID")
    private String evaluationTemplateId;
    /**
     * 自定义字段1
     */
    @NotNull(message = "自定义字段1不能为空")
    @ApiModelProperty("自定义字段1")
    private String customField1;

    /**
     * 自定义字段2
     */
    @NotNull(message = "自定义字段2不能为空")
    @ApiModelProperty("自定义字段2")
    private String customField2;
    @ApiModelProperty("标准数据列表")
    private List<StandardDataDto> standardDataList = new ArrayList<>();
    /**
     * 进度参照值
     */
    @NotNull(message = "进度参照值不能为空")
    @ApiModelProperty("进度参照值")
    private Double refProgressValue;

    /**
     * 进度值
     */
    @ApiModelProperty("进度值")
    private Double progressValue;
    /**
     * 实际值
     */
    @NotNull(message = "实际值不能为空")
    @ApiModelProperty("实际值")
    private Double actualValue;
    /**
     * 数据值结果
     */
    @ApiModelProperty("数据值结果")
    private Double dataResult;
    /**
     * 实际参照值
     */
    @NotNull(message = "实际参照值不能为空")
    @ApiModelProperty("实际参照值")
    private Double refActualValue;
    /**
     * O进度值
     */
    @NotNull(message = "O进度值不能为空")
    @ApiModelProperty("O进度值")
    private Double oProgressValue;

    /**
     * KR进度值
     */
    @NotNull(message = "KR进度值不能为空")
    @ApiModelProperty("KR进度值")
    private Double krProgressValue;

    /**
     * 参照进度值值_下级O权重
     */
    @NotNull(message = "参照进度值值_下级O权重不能为空")
    @ApiModelProperty("参照进度值值_下级O权重")
    private Double countProObWeight;

    /**
     * 参照进度值值_下级KR权重
     */
    @NotNull(message = "参照进度值值_下级KR权重不能为空")
    @ApiModelProperty("参照进度值值_下级KR权重")
    private Double countProKrWeight;
    /**
     * 数据归属内容表主键ID
     */
    @ApiModelProperty("数据归属内容表主键ID")
    private String belongToContentId;
    /**
     * 主客观得分
     */
    @ApiModelProperty("主客观得分")
    private Double subAndObjScore;

    /**
     * 主观得分
     */
    @ApiModelProperty("主观得分")
    private Double subjectiveScore;

    /**
     * 客观得分
     */
    @ApiModelProperty("客观得分")
    private Double objectiveScore;
    /**
     * 通用数值字段（整数型）
     */
    @NotNull(message = "通用数值字段（整数型）不能为空")
    @ApiModelProperty("通用数值字段（整数型）")
    private Long comNumField;
    /**
     * 过程中期汇报得分
     */
    @NotNull(message = "过程中期汇报得分不能为空")
    @ApiModelProperty("过程中期汇报得分")
    private Double processMidCycleReportScore;

    /**
     * 中期汇报得分
     */
    @NotNull(message = "中期汇报得分不能为空")
    @ApiModelProperty("中期汇报得分")
    private Double midCycleReportScore;

    /**
     * 汇报平均分
     */
    @NotNull(message = "汇报平均分不能为空")
    @ApiModelProperty("汇报平均分")
    private Double processReportAverageScore;

    /**
     * 下级KR得分
     */
    @NotNull(message = "下级KR得分不能为空")
    @ApiModelProperty("下级KR得分")
    private Double krProcessScore;

    /**
     * 主客观得分_主观得分权重
     */
    @NotNull(message = "主客观得分_主观得分权重不能为空")
    @ApiModelProperty("主客观得分_主观得分权重")
    private Double subjectiveScoreWeight;

    /**
     * 主客观得分_客观得分权重
     */
    @NotNull(message = "主客观得分_客观得分权重不能为空")
    @ApiModelProperty("主客观得分_客观得分权重")
    private Double objectiveScoreWeight;

    /**
     * 汇报得分_过程中期权重
     */
    @NotNull(message = "汇报得分_过程中期权重不能为空")
    @ApiModelProperty("汇报得分_过程中期权重")
    private Double processReportScoreProMidWeight;

    /**
     * 汇报得分_中期得分权重
     */
    @NotNull(message = "汇报得分_中期得分权重不能为空")
    @ApiModelProperty("汇报得分_中期得分权重")
    private Double processReportScoreMidWeight;

    /**
     * 汇报得分_汇报平均分权重
     */
    @NotNull(message = "汇报得分_汇报平均分权重不能为空")
    @ApiModelProperty("汇报得分_汇报平均分权重")
    private Double processReportScoreAvgWeight;

    /**
     * 汇报得分_下级KR权重
     */
    @NotNull(message = "汇报得分_下级KR权重不能为空")
    @ApiModelProperty("汇报得分_下级KR权重")
    private Double processReportScoreKrWeight;
    /**
     * 下级汇报得分
     */
    @NotNull(message = "下级汇报得分不能为空")
    @ApiModelProperty("下级汇报得分")
    private Double lowReportScore;
    /**
     * 克隆汇报得分
     */
    @NotNull(message = "克隆汇报得分不能为空")
    @ApiModelProperty("克隆汇报得分")
    private Double cloneReportScore;
    /**
     * 下级实际得分
     */
    @NotNull(message = "下级实际得分不能为空")
    @ApiModelProperty("下级实际得分")
    private Double subordinatesActualScore;
    /**
     * 汇报得分_主客观得分权重
     */
    @NotNull(message = "汇报得分_主客观得分权重不能为空")
    @ApiModelProperty("汇报得分_主客观得分权重")
    private Double reportScoreSubAndObjWeight;
    /**
     * 汇报得分
     */
    @NotNull(message = "汇报得分不能为空")
    @ApiModelProperty("汇报得分")
    private Double reportScoreValue;
    /**
     * 实际得分
     */
    @NotNull(message = "实际得分不能为空")
    @ApiModelProperty("实际得分")
    private Double actualScoreValue;

    /**
     * 达成度
     */
    @NotNull(message = "达成度不能为空")
    @ApiModelProperty("达成度")
    private Double reach;
    /**
     * 小数点规则
     */
    @NotNull(message = "小数点规则不能为空")
    @ApiModelProperty("小数点规则")
    private Long decimalPointRules;

    /**
     * 小数最后一位规则 MALING:尾数抹零 ROUNDED:尾数四舍五入
     */
    @NotNull(message = "小数最后一位规则不能为空")
    @ApiModelProperty("小数最后一位规则")
    private String decimalDigitsLastRules;
    /**
     * 周期模式 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
     */
    @NotNull(message = "周期模式不能为空")
    @ApiModelProperty("周期模式")
    private String cycleMode;
    /**
     * 权重分值
     */
    @NotNull(message = "权重分值不能为空")
    @ApiModelProperty("权重分值")
    private Double weightScore;

    /**
     * 被评对象目标周期ID
     */
    @NotNull(message = "被评对象目标周期ID不能为空")
    @ApiModelProperty("被评对象目标周期ID")
    private String evaObjTargetCycleId;
    /**
     * 计算结果
     */
    @NotNull(message = "计算结果不能为空")
    @ApiModelProperty("计算结果")
    private Double calcResult;
    /**
     * 通用数值字段1（小数型）
     */
    @NotNull(message = "通用数值字段1（小数型）不能为空")
    @ApiModelProperty("通用数值字段1（小数型）")
    private Double comFloatField1;
    /**
     * 数据业务场景 TARGET_PLAN_CALC_DATA_STATISTICS:目标规划计算数据统计 BUDGET_DATA_STATISTICS:预算数据统计 PMO_DATA_STATISTICS:PMO数据统计 REPORT_TASK_DATA_STATISTICS:11111汇报任务数据统计
     */
    @NotNull(message = "数据业务场景不能为空")
    @ApiModelProperty("数据业务场景")
    private String dataUsageSceneCode;

    /**
     * 自定义字段3
     */
    @NotNull(message = "自定义字段3不能为空")
    @ApiModelProperty("自定义字段3")
    private String customField3;

    /**
     * 自定义字段4
     */
    @NotNull(message = "自定义字段4不能为空")
    @ApiModelProperty("自定义字段4")
    private String customField4;

    /**
     * 自定义字段5
     */
    @NotNull(message = "自定义字段5不能为空")
    @ApiModelProperty("自定义字段5")
    private String customField5;

    /**
     * 自定义字段6
     */
    @NotNull(message = "自定义字段6不能为空")
    @ApiModelProperty("自定义字段6")
    private String customField6;

    /**
     * 自定义字段7
     */
    @NotNull(message = "自定义字段7不能为空")
    @ApiModelProperty("自定义字段7")
    private String customField7;

    /**
     * 自定义字段8
     */
    @NotNull(message = "自定义字段8不能为空")
    @ApiModelProperty("自定义字段8")
    private String customField8;

    /**
     * 自定义字段9
     */
    @NotNull(message = "自定义字段9不能为空")
    @ApiModelProperty("自定义字段9")
    private String customField9;
    /**
     * 本级过程得分
     */
    @ApiModelProperty("本级过程得分")
    private Double thisLevelProcessScore;

    /**
     * 下级目标得分
     */
    @ApiModelProperty("下级目标得分")
    private Double subTargetScore;

    /**
     * 目标得分
     */
    @ApiModelProperty("目标得分")
    private Double targetScore;
    /**
     * 克隆目标得分
     */
    @ApiModelProperty("克隆目标得分")
    private Double cloneTargetScore;
    /**
     * 目标得分_本级过程得分权重
     */
    @NotNull(message = "目标得分_本级过程得分权重不能为空")
    @ApiModelProperty("目标得分_本级过程得分权重")
    private Double actualScoreLocalLevelWeight;

    /**
     * 目标得分_下级目标得分权重
     */
    @NotNull(message = "目标得分_下级目标得分权重不能为空")
    @ApiModelProperty("目标得分_下级目标得分权重")
    private Double actualScoreLowerLevelWeight;
    /**
     * 数据是否准备完整 TRUE:是 FALSE:否
     */
    @ApiModelProperty("数据是否准备完整")
    private String dataCompletePreparation;
    /**
     * 其他树目标得分本级或下级变量 RANK_CALC:计算本级得分 DOWN_CALC:计算下级得分 RANK_AND_DOWN_CALC:计算本级+下级得分
     */
    @NotNull(message = "其他树目标得分本级或下级变量不能为空")
    @ApiModelProperty("其他树目标得分本级或下级变量")
    private String otherTreeRankOrDownCalc;
    /**
     * 其他树目标得分
     */
    @NotNull(message = "其他树目标得分不能为空")
    @ApiModelProperty("其他树目标得分")
    private Double otherTargetScore;

    /**
     * 其他树达成度
     */
    @NotNull(message = "其他树达成度不能为空")
    @ApiModelProperty("其他树达成度")
    private Double otherReach;
    @ApiModelProperty("被评对象目标周期列表 ")
    List<String> evaObjTargetCycleList = new ArrayList<>();
    /**
     * 执行周期阶段ID
     */
    @ApiModelProperty("执行周期阶段ID")
    private String executeCycleStageId;
    /**
     * 本级过程得分_主客观得分权重原始
     */
    @NotNull(message = "本级过程得分_主客观得分权重原始不能为空")
    @ApiModelProperty("本级过程得分_主客观得分权重原始")
    private Double reportScoreSubAndObjWeightOri;

    /**
     * 本级过程得分_过程中期得分权重原始
     */
    @NotNull(message = "本级过程得分_过程中期得分权重原始不能为空")
    @ApiModelProperty("本级过程得分_过程中期得分权重原始")
    private Double processReportScoreProMidWeightOri;

    /**
     * 本级过程得分_中期得分权重原始
     */
    @NotNull(message = "本级过程得分_中期得分权重原始不能为空")
    @ApiModelProperty("本级过程得分_中期得分权重原始")
    private Double processReportScoreMidWeightOri;

    /**
     * 本级过程得分_最近平均分权重原始
     */
    @NotNull(message = "本级过程得分_最近平均分权重原始不能为空")
    @ApiModelProperty("本级过程得分_最近平均分权重原始")
    private Double processReportScoreAvgWeightOri;
    /**
     * 目标得分十位精度
     */
    @ApiModelProperty("目标得分十位精度")
    private Double targetScoreTen;
    @ApiModelProperty("周期列表")
    private List<CycleDto> cycleList = new ArrayList<>();

}
